//: [Previous](@previous)

import Foundation

var greeting = "Hello, playground"

//: [Next](@next)

let age = 4

//if后面的条件可以省略小括号，条件后面的大括号不可以省略
if age >= 22 {
    print("结婚了")
} else if age >= 18 {
    print("成年人")
}else if age >= 7 {
    print("小孩")
}

//if后面的条件只能是Bool类型
//if age { //❌这里会报错
//}

///while

var num = 5
while num > 0 {
    print("num is \(num)")
    num -= 1
}//打印了5次：5、4、3、2、1


var num2 = -1
repeat {
    print("num is\(num2)")
} while num2 > 0 //打印了1次

//repeat-while相当于C语言中的do-while；这里不用num--，是因为从Swift3开始，去除了自增（++）、自减（--）运算符


///for
//闭区间运算符：a...b，a <= 取值 <= b
//let names = ["Anna", "Alex", "Brian", "Jack"]
for i in 0...3 {
//    print(names[i])
} // Anna Alex Brian Jack

for i in 1...5 {
    print("\(i) 乘以 5 等于 \(i * 5)")
}


//for – 区间运算符用在数组上
let names2 = ["Anna", "Alex", "Brian", "Jack"]
for names2 in names2[0...3] {
    print(names2)//打印：Anna、Alex、Brian、Jack
}

//让区间朝一个方向尽可能的远

let names = ["Anna", "Alex", "Brian", "Jack"]
//打印角标2开始到数组不越界
for nameStr in names[2...] {
    print(nameStr)//打印：Brian、Jack
}

//打印从数组第一个元素开始到下标为2结束
for nameStr in names[...2] {
    print("无穷小：\(nameStr)")//打印：Anna、Alex、Brian
}

//打印从数组第一个元素开始到下标小于2结束
for nameStr in names[..<2] {
    print("无穷小-半开：\(nameStr)")//打印：Anna、Alex
}


//例子:
        let sex = 0
        
        switch sex {
        case 0 :
            print("男")
        case 1 :
            print("女")
        default :
            print("其他")
        }
        //简单使用补充:一个case判断中,可以判断多个值,多个值以,隔开
        let sex1 = 0
        
        switch sex1 {
        case 0, 1:
            print("正常人")
        default:
            print("其他")
        }
       // 简单使用补充: 如果希望出现之前的case穿透,则可以使用关键字fallthrough
        let sex2 = 0
        
        switch sex2 {
        case 0:
            fallthrough
        case 1:
            print("正常人")
        default:
            print("其他")
        }
       // Switch支持多种数据类型,浮点型的switch判断
        let f = 3.14
        switch f {
        case 3.14:
            print("π")
        default:
            print("not π")
        }


//逻辑非让一个布尔值取反，true变为false，false变为true。
       
       let allowedEntry = false
       if !allowedEntry {
           print("拒绝访问")
       }
       // Prints "拒绝访问"
      // 逻辑与运算符 (Logical AND Operator)
       
       //逻辑与运算符(a && b)两边的逻辑语句都为true时，整个语句才是true。如果有其中一个为false，整个语句就为false。实际上，只要第一个语句是false，第二个语句就不会在计算了，因为第二个语句无论是true还是false都不可能把最终的结果改为true。
       
       let enteredDoorCode = true
       let passedRetinaScan = false
       if enteredDoorCode && passedRetinaScan {
           print("Welcome!")
       } else {
           print("ACCESS DENIED")
       }
       // Prints "ACCESS DENIED"
      // 逻辑或运算符 (Logical OR Operator)
       
       //逻辑或运算符两边的逻辑语句，只要有一个是true，那整个语句就是true。如果第一个语句是true，第二个就不会再计算。
       
       let hasDoorKey = false
       let knowsOverridePassword = true
       if hasDoorKey || knowsOverridePassword {
           print("Welcome!")
       } else {
           print("ACCESS DENIED")
       }
       // Prints "Welcome!"
       //组合逻辑运算符 (Combining Logical Operators)
       
       if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
           print("Welcome!")
       } else {
           print("ACCESS DENIED")
       }
       // Prints "Welcome!"
       //在这个例子中，使用多个&&和||运算符来创建一个更长的复合语句。但是&&和||运算符还是仅仅操作两个逻辑语句。上面的代码可以这么读：如果我们输入了正确的门密码并且通过了视网膜扫描，或者有门钥匙，或者我们知道紧急覆盖密码，那么就允许进入。
       
      // 在恰当的位置加上括号，增强代码的易读性：
       
       if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
           print("Welcome!")
       } else {
           print("ACCESS DENIED")
       }
